EXAMPLE

/* Note: This example was broken up to version 2.1 of muimaster.doc */

LONG mSet(struct IClass *cl,Object *obj,sruct opSet *msg)
{
   struct Data *data = INST_DATA(cl,obj);
   struct TagItem *tags,*tag;

   for (tags=msg->ops_AttrList;tag=NextTagItem(&tags);)
   {
      switch (tag->ti_Tag)
      {
         case MYATTR_PEN_1:
            data->pen1 = tag->ti_Data;       /* set the new value  */
            data->mark = 1;                  /* set internal marker*/
            MUI_Redraw(obj,MADF_DRAWUPDATE); /* update ourselves   */
            break;

         case MYATTR_PEN_1:
            data->pen2 = tag->ti_Data;       /* set the new value  */
            data->mark = 2;                  /* set internal marker*/
            MUI_Redraw(obj,MADF_DRAWUPDATE); /* update ourselves   */
            break;
      }
   }

   return(DoSuperMethodA(cl,obj,msg));
}

LONG mDraw(struct IClass *cl,Object *obj,struct MUIP_Draw *msg)
{
   struct Data *data = INST_DATA(cl,obj);

   // ** Note: You *must* call the super method prior to do
   // ** anything else, otherwise msg->flags will not be set
   // ** properly !!!

   DoSuperMethodA(cl,obj,msg); // ALWAYS REQUIRED!

   if (msg->flags & MADF_DRAWUPDATE)
   {
      /* called as a result of our MUI_Redraw() during
         MUIM_Set method. Depending on our internal
         marker, we render different things. */

      switch (data->mark)
      {
         case 1: RenderChangesFromPen1(cl,obj); break;
         case 2: RenderChangesFromPen2(cl,obj); break;
      }
   }
   else if (msg->flags & MADF_DRAWOBJECT)
   {
      /* complete redraw, maybe the window was just opened. */
      DrawObjectCompletely(cl,obj);
   }

   /* if MADF_DRAWOBJECT wasn't set, MUI just wanted to update
      the frame or some other part of our object. In this case
      we just do nothing. */

    return(0);
}